﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLNhaThuoc.DTO;
using QLNhaThuoc.BL;
using QLNhaThuoc.MyClass;

namespace QLNhaThuoc
{
    public partial class Form_NguoiDung : Form
    {
        public Form_NguoiDung()
        {
            InitializeComponent();
        }

        NhanVienControl nhanVienCtrl;
        BindingSource bs;
        private void Form_NguoiDung_Load(object sender, EventArgs e)
        {
            nhanVienCtrl = new NhanVienControl();
            bs = new BindingSource();
            XuatListTaiKhoan();
            bs.PositionChanged += new EventHandler(bs_PositionChanged);
            bs_PositionChanged(sender, e);

            tbMaNV.ReadOnly = true;
            btSave.Enabled = false;
            btCancel.Enabled = false;
        }

        void bs_PositionChanged(object sender, EventArgs e)
        {
            XuatTaiKhoan();
        }

        private void XuatListTaiKhoan()
        {
            bs.DataSource = nhanVienCtrl.LayListNhanVien();
            dgvTK.AutoGenerateColumns = false;
            dgvTK.DataSource = null;
            dgvTK.DataSource = bs;
        }

        private void XuatTaiKhoan()
        {
            if (bs.Count > 0)
            {
                NhanVien info = (NhanVien)bs.Current;
                tbMaNV.Text = info.MaNV;
                tbUsername.Text = info.Username;
                tbPassword.Text = info.Password;
                CheckQuyenHan(info.LoaiNV);
            }
        }

        private void CheckQuyenHan(string quyenHan)
        {
            if (quyenHan == "AD")
                rbAdmin.Checked = true;
            else if (quyenHan == "NV")
                rbNhanVien.Checked = true;
            else if (quyenHan == "QL")
                rbQuanLy.Checked = true;
        }

        private void btCapNhat_Click(object sender, EventArgs e)
        {
            tbMaNV.ReadOnly = true;
            btSave.Enabled = true;
            btCancel.Enabled = true;
        }

        private void btAccept_Click(object sender, EventArgs e)
        {
            if (KiemTraDuLieuNhap() == true)
            {
                string quyenHan = LayQuyenHan();
                if (string.IsNullOrEmpty(quyenHan))
                {
                    Utils.ShowError("Bạn phải chọn quyền hạn", "Thông báo");
                    return;
                }
                    
                NhanVien nv = (NhanVien)bs.Current;
                nv.Username = tbUsername.Text;
                nv.Password = tbPassword.Text;
                nv.LoaiNV = quyenHan;

                nhanVienCtrl.CapNhatNV(nv);
                XuatListTaiKhoan();

                tbMaNV.ReadOnly = true;
                btSave.Enabled = false;
                btCancel.Enabled = false;
            }
        }

        private string LayQuyenHan()
        {
            if (rbAdmin.Checked)
                return "AD";
            if (rbNhanVien.Checked)
                return "NV";
            if (rbQuanLy.Checked)
                return "QL";

            return "";
        }

        private void btCancel_Click(object sender, EventArgs e)
        {
            XuatTaiKhoan();

            tbMaNV.ReadOnly = true;
            btSave.Enabled = false;
            btCancel.Enabled = false;
        }

        private bool KiemTraDuLieuNhap()
        {
            if (tbMaNV.Text == "")
            {
                Utils.ShowError("Bạn phải nhập mã nhân viên", "Thông báo");
                return false;
            }

            if (tbUsername.Text == "")
            {
                Utils.ShowError("Bạn phải nhập username", "Thông báo");
                return false;
            }

            if (tbPassword.Text == "")
            {
                Utils.ShowError("Bạn phải nhập password", "Thông báo");
                return false;
            }

            return true;
        }

        private void tbMaNV_Validating(object sender, CancelEventArgs e)
        {
            TextBox tmp = (TextBox)sender;
            if (nhanVienCtrl.LayNhanVienTheoMa(tmp.Text) == null)
            {
                errorProvider1.SetError(tmp, "Không tồn tại mã nhân viên này");
                e.Cancel = true;
            }
            else
            {
                errorProvider1.SetError(tmp, "");
                e.Cancel = false;
            }
        }
    }
}
